package bc.sistema.usuario.professor;

import bc.exceptions.SalaInvalidaException;
import bc.exceptions.TelefoneInvalidoException;
import bc.sistema.usuario.Telefone;

/**
 * Classe Sala
 *
 * @author Felipe Miranda Medeiros
 * @version 1.0
 */
public class Sala {

    private String bloco;
    private String sala;
    private Telefone telefone;

    /**
     * Construtor de Sala.
     *
     * @param bloco Nome do bloco da sala.
     * @param sala Nome ou número da sala.
     * @param telefone Telefone da sala.
     * @throws SalaInvalidaException Se algum parametro passado for null ou
     * vazio.
     */
    public Sala(String bloco, String sala, Telefone telefone) throws SalaInvalidaException {
        setBloco(bloco);
        setSala(sala);
        this.telefone = telefone;
    }

    /**
     * Atribiu um nome ao bloco.
     *
     * @param bloco Nome do bloco.
     * @throws SalaInvalidaException Se o nome do bloco for null ou vazio.
     */
    public void setBloco(String bloco) throws SalaInvalidaException {
        if (bloco == null) {
            throw new SalaInvalidaException("Nome do bloco null");
        }
        if (bloco.equals("")) {
            throw new SalaInvalidaException("Nome do bloco em branco");
        }
        this.bloco = bloco;
    }

    /**
     * Retorna o nome do bloco.
     *
     * @return o nome do bloco.
     */
    public String getBloco() {
        return bloco;
    }

    /**
     * Atribui um nome a sala.
     *
     * @param sala Nome ou número da sala.
     * @throws SalaInvalidaException Se o nome da sala for null ou vazio.
     */
    public void setSala(String sala) throws SalaInvalidaException {
        if (sala == null) {
            throw new SalaInvalidaException("Nome da sala null");
        }
        if (sala.equals("")) {
            throw new SalaInvalidaException("Nome da sala em branco");
        }
        this.sala = sala;
    }

    /**
     * Retorna o nome da sala.
     *
     * @return o nome da sala.
     */
    public String getSala() {
        return sala;
    }

    /**
     * Retorna o número do telefone da sala.
     *
     * @return o número do telefone da sala.
     */
    public int getTelefone() {
        return telefone.getTelefone();
    }

    /**
     * Retorna o número do telefone da sala formatado.
     *
     * @return tring com o telefone no formato xxxx-xxxx
     */
    public String getTelefoneFormatado() {
        return telefone.toString();
    }

    /**
     * Atribui um número ao telefone da sala.
     *
     * @param telefone Número do telefone.
     * @throws TelefoneInvalidoException Se o número do telefone for maior que 8
     * dígitos ou menor que isso.
     */
    public void setTelefone(int telefone) throws TelefoneInvalidoException {
        this.telefone.setTelefone(telefone);
    }
}
